From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Mon, 12 Aug 2024 20:24:28 +0000 (-0600) Subject: fix bend filter usage of linepart. (#1320) X-Git-Tag: archive/raspbian/1.10.0+ds-2+rpi1~1^2~12^2^2~70 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https://%22Program/%22http:/www.example.com/cgi/%22https:/%22Program?a=commitdiff_plain;h=ba542e9dff6839e9723b7a436c69ff2b05d55181;p=gpsbabel.git fix bend filter usage of linepart. (#1320) * fix bend filter usage of linepart. * fix new bend filter test. * make new reference files valid kml. * debug macos fails * workaround rounding errors in problematic kml lookat range. --- diff --git a/bend.cc b/bend.cc index 29cc1d488..774bea92e 100644 --- a/bend.cc +++ b/bend.cc @@ -53,34 +53,38 @@ void BendFilter::init() route_flush_all_routes(); } -Waypoint* BendFilter::create_wpt_dest(const Waypoint* wpt_orig, double lat_orig, - double long_orig, double lat_orig_adj, double long_orig_adj) const +Waypoint* BendFilter::create_wpt_dest(const Waypoint* wpt_orig, const Waypoint* wpt_orig_adj) const { - double distance = gcdist(lat_orig, long_orig, - lat_orig_adj, long_orig_adj); - double lat_dest; - double long_dest; - distance = radtometers(distance); + double distance = radtometers(gcdist(RAD(wpt_orig->latitude), RAD(wpt_orig->longitude), + RAD(wpt_orig_adj->latitude), RAD(wpt_orig_adj->longitude))); if (distance <= maxDist) { return nullptr; } double frac = maxDist / distance; - linepart(lat_orig, long_orig, lat_orig_adj, long_orig_adj, frac, - &lat_dest, &long_dest); - auto* wpt_dest = new Waypoint(*wpt_orig); - wpt_dest->latitude = DEG(lat_dest); - wpt_dest->longitude = DEG(long_dest); + linepart(wpt_orig->latitude, wpt_orig->longitude, + wpt_orig_adj->latitude, wpt_orig_adj->longitude, + frac, + &wpt_dest->latitude, &wpt_dest->longitude); return wpt_dest; } -int BendFilter::is_small_angle(double lat_orig, double long_orig, double lat_orig_prev, - double long_orig_prev, double lat_orig_next, - double long_orig_next) const +int BendFilter::is_small_angle(const Waypoint* wpt_orig, + const Waypoint* wpt_orig_prev, + const Waypoint* wpt_orig_next) const { + double lat_orig = RAD(wpt_orig->latitude); + double long_orig = RAD(wpt_orig->longitude); + + double lat_orig_prev = RAD(wpt_orig_prev->latitude); + double long_orig_prev = RAD(wpt_orig_prev->longitude); + + double lat_orig_next = RAD(wpt_orig_next->latitude); + double long_orig_next = RAD(wpt_orig_next->longitude); + double heading_prev = heading_true_degrees(lat_orig, long_orig, lat_orig_prev, long_orig_prev); double heading_next = heading_true_degrees(lat_orig, long_orig, @@ -106,28 +110,17 @@ void BendFilter::process_route(const route_head* route_orig, route_head* route_d route_add_wpt(route_dest, waypoint_dest); } } else { - double lat_orig = RAD(wpt_orig->latitude); - double long_orig = RAD(wpt_orig->longitude); - - double lat_orig_prev = RAD(wpt_orig_prev->latitude); - double long_orig_prev = RAD(wpt_orig_prev->longitude); - - double lat_orig_next = RAD(wpt_orig_next->latitude); - double long_orig_next = RAD(wpt_orig_next->longitude); - if (is_small_angle(lat_orig, long_orig, lat_orig_prev, - long_orig_prev, lat_orig_next, long_orig_next)) { + if (is_small_angle(wpt_orig, wpt_orig_prev, wpt_orig_next)) { auto* waypoint_dest = new Waypoint(*wpt_orig); route_add_wpt(route_dest, waypoint_dest); } else { - Waypoint* wpt_dest_prev = create_wpt_dest(wpt_orig, - lat_orig, long_orig, lat_orig_prev, long_orig_prev); + Waypoint* wpt_dest_prev = create_wpt_dest(wpt_orig, wpt_orig_prev); if (wpt_dest_prev != nullptr) { route_add_wpt(route_dest, wpt_dest_prev); } - Waypoint* wpt_dest_next = create_wpt_dest(wpt_orig, - lat_orig, long_orig, lat_orig_next, long_orig_next); + Waypoint* wpt_dest_next = create_wpt_dest(wpt_orig, wpt_orig_next); if (wpt_dest_next != nullptr) { route_add_wpt(route_dest, wpt_dest_next); diff --git a/bend.h b/bend.h index a87d8c758..69cc59c70 100644 --- a/bend.h +++ b/bend.h @@ -61,11 +61,10 @@ private: }, }; - Waypoint* create_wpt_dest(const Waypoint* wpt_orig, double lat_orig, - double long_orig, double lat_orig_adj, double long_orig_adj) const; - int is_small_angle(double lat_orig, double long_orig, double lat_orig_prev, - double long_orig_prev, double lat_orig_next, - double long_orig_next) const; + Waypoint* create_wpt_dest(const Waypoint* wpt_orig, const Waypoint* wpt_adj) const; + int is_small_angle(const Waypoint* wpt_orig, + const Waypoint* wpt_orig_prev, + const Waypoint* wpt_orig_next) const; void process_route(const route_head* route_orig, route_head* route_dest); void process_route_orig(const route_head* route_orig); diff --git a/reference/route/bend-expected.gpx b/reference/route/bend-expected.gpx index 78deb90f1..3b6ed9f78 100644 --- a/reference/route/bend-expected.gpx +++ b/reference/route/bend-expected.gpx @@ -1,7 +1,7 @@ - + santander Generated from track santander @@ -9,15 +9,15 @@ 34.733 RPT001 - + 34.252 RPT002 - + 34.252 RPT002 - + 31.369 RPT003 @@ -25,71 +25,71 @@ 31.369 RPT003 - + 28.965 RPT004 - + 24.159 RPT005 - + 24.159 RPT005 - + 22.236 RPT006 - + 22.236 RPT006 - + 29.927 RPT007 - + 29.927 RPT007 - + 37.617 RPT008 - + 37.617 RPT008 - + 56.843 RPT009 - + 56.843 RPT009 - + 52.998 RPT010 - + 52.998 RPT010 - + 52.998 RPT011 - + 52.998 RPT011 - + 43.385 RPT012 - + 43.385 RPT012 @@ -97,31 +97,31 @@ 29.927 RPT013 - + 29.927 RPT013 - + 20.794 RPT014 - + 20.794 RPT014 - + 19.833 RPT015 - + 19.833 RPT015 - + 15.507 RPT016 - + 15.507 RPT016 @@ -129,23 +129,23 @@ 15.026 RPT017 - + 15.026 RPT017 - + 11.662 RPT018 - + 11.662 RPT018 - + 11.181 RPT019 - + 11.181 RPT019 @@ -153,83 +153,83 @@ 11.662 RPT020 - + 11.662 RPT020 - + 7.816 RPT021 - + 7.816 RPT021 - + 14.546 RPT022 - + 14.546 RPT022 - + 17.430 RPT023 - + 17.430 RPT023 - + 16.468 RPT024 - + 16.468 RPT024 - + 19.352 RPT025 - + 19.352 RPT025 - + 17.910 RPT026 - + 17.910 RPT026 - + 26.081 RPT027 - + 26.081 RPT027 - + 27.523 RPT028 - + 27.523 RPT028 - + 28.965 RPT029 - + 28.965 RPT029 - + 36.175 RPT030 @@ -241,103 +241,103 @@ 40.501 RPT031 - + 40.501 RPT031 - + 51.075 RPT032 - + 51.075 RPT032 - + 49.153 RPT033 - + 49.153 RPT033 - + 52.037 RPT034 - + 52.037 RPT034 - + 56.843 RPT035 - + 56.843 RPT035 - + 59.246 RPT036 - + 59.246 RPT036 - + 58.766 RPT037 - + 58.766 RPT037 - + 62.611 RPT038 - + 62.611 RPT038 - + 65.014 RPT039 - + 65.014 RPT039 - + 65.014 RPT040 - + 65.014 RPT040 - + 67.418 RPT041 - + 67.418 RPT041 - + 62.130 RPT042 - + 62.130 RPT042 - + 64.534 RPT043 - + 64.534 RPT043 @@ -345,27 +345,27 @@ 66.456 RPT044 - + 66.456 RPT044 - + 53.479 RPT045 - + 53.479 RPT045 - + 46.750 RPT046 - + 46.750 RPT046 - + 56.843 RPT047 @@ -373,11 +373,11 @@ 56.843 RPT047 - + 58.766 RPT048 - + 62.611 RPT049 @@ -385,11 +385,11 @@ 62.611 RPT049 - + 60.688 RPT050 - + 29.927 RPT051 @@ -401,51 +401,51 @@ 29.446 RPT052 - + 29.446 RPT052 - + 12.623 RPT053 - + 12.623 RPT053 - + 35.214 RPT054 - + 35.214 RPT054 - + 26.081 RPT055 - + 35.694 RPT056 - + 36.656 RPT057 - + 36.656 RPT057 - + 38.578 RPT058 - + 38.578 RPT058 - + 32.811 RPT059 @@ -453,19 +453,19 @@ 32.811 RPT059 - + 32.811 RPT060 - + 32.811 RPT060 - + 31.369 RPT061 - + 31.369 RPT061 @@ -473,51 +473,51 @@ 29.927 RPT062 - + 29.927 RPT062 - + 25.120 RPT063 - + 25.120 RPT063 - + 9.258 RPT064 - + 9.258 RPT064 - + 6.374 RPT065 - + 6.374 RPT065 - + 5.413 RPT066 - + 5.413 RPT066 - + 5.894 RPT067 - + 5.894 RPT067 - + 7.816 RPT068 @@ -529,43 +529,43 @@ 6.374 RPT069 - + 6.374 RPT069 - + 2.529 RPT070 - + 2.529 RPT070 - + 2.529 RPT071 - + 2.529 RPT071 - + 3.971 RPT072 - + 3.971 RPT072 - + 1.568 RPT073 - + 1.568 RPT073 - + 0.126 RPT074 @@ -573,35 +573,35 @@ 0.126 RPT074 - + 2.049 RPT075 - + 2.049 RPT075 - + 0.126 RPT076 - + 0.126 RPT076 - + 2.049 RPT077 - + 2.049 RPT077 - + 3.490 RPT078 - + 3.971 RPT079 @@ -609,19 +609,19 @@ 3.971 RPT079 - + 4.932 RPT080 - + 2.049 RPT081 - + 2.049 RPT081 - + 0.607 RPT082 @@ -629,19 +629,19 @@ 0.607 RPT082 - + 2.529 RPT083 - + 1.568 RPT084 - + 1.568 RPT084 - + 2.529 RPT085 @@ -653,15 +653,15 @@ 3.971 RPT086 - + 5.413 RPT087 - + 5.413 RPT087 - + 1.087 RPT088 @@ -669,27 +669,27 @@ 1.087 RPT088 - + 3.971 RPT089 - + 12.142 RPT090 - + 12.142 RPT090 - + 8.297 RPT091 - + 8.297 RPT091 - + -0.835 RPT092 @@ -701,19 +701,19 @@ 5.413 RPT093 - + 5.413 RPT093 - + 25.120 RPT094 - + 25.120 RPT094 - + 25.120 RPT095 @@ -721,43 +721,43 @@ 25.120 RPT095 - + 23.197 RPT096 - + 26.562 RPT097 - + 26.562 RPT097 - + 26.081 RPT098 - + 26.081 RPT098 - + 26.562 RPT099 - + 26.562 RPT099 - + 26.081 RPT100 - + 26.081 RPT100 - + 30.888 RPT101 @@ -769,11 +769,11 @@ 25.601 RPT102 - + 25.601 RPT102 - + 20.794 RPT103 @@ -785,43 +785,43 @@ 17.430 RPT104 - + 17.430 RPT104 - + 6.374 RPT105 - + 6.374 RPT105 - + 4.932 RPT106 - + 4.932 RPT106 - + 2.529 RPT107 - + 2.529 RPT107 - + 15.507 RPT108 - + 15.507 RPT108 - + 19.833 RPT109 @@ -829,11 +829,11 @@ 19.833 RPT109 - + 20.313 RPT110 - + 11.181 RPT111 @@ -841,63 +841,63 @@ 11.181 RPT111 - + 2.049 RPT112 - + 2.049 RPT112 - + 6.374 RPT113 - + 6.374 RPT113 - + 7.336 RPT114 - + 7.336 RPT114 - + 11.662 RPT115 - + 11.662 RPT115 - + 12.142 RPT116 - + 12.142 RPT116 - + 15.026 RPT117 - + 15.026 RPT117 - + 13.584 RPT118 - + 13.584 RPT118 - + 10.220 RPT119 @@ -905,27 +905,27 @@ 10.220 RPT119 - + 9.258 RPT120 - + 14.065 RPT121 - + 14.065 RPT121 - + 11.662 RPT122 - + 11.662 RPT122 - + 6.855 RPT123 @@ -933,139 +933,139 @@ 6.855 RPT123 - + 4.932 RPT124 - + 3.971 RPT125 - + 3.971 RPT125 - + 5.894 RPT126 - + 5.894 RPT126 - + 5.413 RPT127 - + 5.413 RPT127 - + 22.717 RPT128 - + 22.717 RPT128 - + 38.578 RPT129 - + 38.578 RPT129 - + 58.766 RPT130 - + 58.766 RPT130 - + 66.456 RPT131 - + 66.456 RPT131 - + 62.611 RPT132 - + 62.611 RPT132 - + 64.053 RPT133 - + 64.053 RPT133 - + 65.976 RPT134 - + 65.976 RPT134 - + 66.456 RPT135 - + 66.456 RPT135 - + 61.169 RPT136 - + 61.169 RPT136 - + 62.611 RPT137 - + 62.611 RPT137 - + 61.650 RPT138 - + 61.650 RPT138 - + 46.269 RPT139 - + 46.269 RPT139 - + 36.175 RPT140 - + 36.175 RPT140 - + 18.391 RPT141 @@ -1077,27 +1077,27 @@ 10.220 RPT142 - + 18.391 RPT143 - + 18.391 RPT143 - + 37.136 RPT144 - + 37.136 RPT144 - + 31.369 RPT145 - + 31.369 RPT145 @@ -1105,19 +1105,19 @@ 4.932 RPT146 - + 13.584 RPT147 - + 13.584 RPT147 - + 24.639 RPT148 - + 24.639 RPT148 @@ -1125,91 +1125,91 @@ 27.523 RPT149 - + 27.523 RPT149 - + 22.717 RPT150 - + 22.717 RPT150 - + 45.307 RPT151 - + 45.307 RPT151 - + 26.562 RPT152 - + 26.562 RPT152 - + 34.733 RPT153 - + 34.733 RPT153 - + 26.562 RPT154 - + 26.562 RPT154 - + 34.252 RPT155 - + 34.252 RPT155 - + 28.965 RPT156 - + 28.965 RPT156 - + 24.159 RPT157 - + 24.159 RPT157 - + 23.197 RPT158 - + 23.197 RPT158 - + 21.755 RPT159 - + 21.755 RPT160 - + 23.197 RPT161 @@ -1221,63 +1221,63 @@ 9.739 RPT162 - + 9.739 RPT162 - + 11.181 RPT163 - + 11.181 RPT163 - + 12.623 RPT164 - + 12.623 RPT164 - + 22.236 RPT165 - + 22.236 RPT165 - + 38.098 RPT166 - + 38.098 RPT166 - + 24.639 RPT167 - + 24.639 RPT167 - + 16.949 RPT168 - + 16.949 RPT168 - + 19.833 RPT169 - + 19.833 RPT169 @@ -1285,31 +1285,31 @@ 3.010 RPT170 - + 18.871 RPT171 - + 18.871 RPT171 - + 15.507 RPT172 - + 15.507 RPT172 - + 23.678 RPT173 - + 23.678 RPT173 - + 36.656 RPT174 @@ -1317,19 +1317,19 @@ 36.656 RPT174 - + 39.540 RPT175 - + 40.501 RPT176 - + 40.501 RPT176 - + 46.269 RPT177 @@ -1337,15 +1337,15 @@ 46.269 RPT177 - + 55.709 RPT178 - + 55.709 RPT178 - + 70.709 RPT179 @@ -1353,11 +1353,11 @@ 70.709 RPT179 - + 75.709 RPT180 - + 90.267 RPT181 @@ -1365,55 +1365,55 @@ 90.267 RPT181 - + 95.964 RPT182 - + 95.964 RPT182 - + 100.102 RPT183 - + 100.102 RPT183 - + 93.373 RPT184 - + 93.373 RPT184 - + 90.970 RPT185 - + 90.970 RPT185 - + 88.086 RPT186 - + 88.086 RPT186 - + 87.605 RPT187 - + 87.605 RPT187 - + 102.986 RPT188 @@ -1425,15 +1425,15 @@ 126.058 RPT189 - + 126.058 RPT189 - + 144.803 RPT190 - + 144.803 RPT190 @@ -1441,11 +1441,11 @@ 180.372 RPT191 - + 180.372 RPT191 - + 191.427 RPT192 @@ -1453,15 +1453,15 @@ 191.427 RPT192 - + 197.195 RPT193 - + 210.653 RPT194 - + 210.653 RPT194 @@ -1469,39 +1469,39 @@ 231.802 RPT195 - + 208.730 RPT196 - + 208.730 RPT196 - + 195.272 RPT197 - + 195.272 RPT197 - + 187.101 RPT198 - + 187.101 RPT198 - + 155.378 RPT199 - + 155.378 RPT199 - + 148.168 RPT200 @@ -1513,27 +1513,27 @@ 183.736 RPT201 - + 183.736 RPT201 - + 200.079 RPT202 - + 200.079 RPT202 - + 208.730 RPT203 - + 208.730 RPT203 - + 221.228 RPT204 @@ -1541,11 +1541,11 @@ 221.228 RPT204 - + 235.166 RPT205 - + 235.166 RPT205 @@ -1553,23 +1553,23 @@ 226.034 RPT206 - + 226.034 RPT206 - + 201.521 RPT207 - + 201.521 RPT207 - + 188.543 RPT208 - + 188.543 RPT208 @@ -1577,183 +1577,183 @@ 144.803 RPT209 - + 144.803 RPT209 - + 141.919 RPT210 - + 141.919 RPT210 - + 136.151 RPT211 - + 136.151 RPT211 - + 110.196 RPT212 - + 110.196 RPT212 - + 86.163 RPT213 - + 86.163 RPT213 - + 75.589 RPT214 - + 75.589 RPT214 - + 71.263 RPT215 - + 71.263 RPT215 - + 66.937 RPT216 - + 66.937 RPT216 - + 63.092 RPT217 - + 63.092 RPT217 - + 61.650 RPT218 - + 61.650 RPT218 - + 59.727 RPT219 - + 59.727 RPT219 - + 55.882 RPT220 - + 55.882 RPT220 - + 53.479 RPT221 - + 53.479 RPT221 - + 55.401 RPT222 - + 55.401 RPT222 - + 52.037 RPT223 - + 52.037 RPT223 - + 49.153 RPT224 - + 49.153 RPT224 - + 46.750 RPT225 - + 46.750 RPT225 - + 48.672 RPT226 - + 48.672 RPT226 - + 44.827 RPT227 - + 44.827 RPT227 - + 44.827 RPT228 - + 44.827 RPT228 - + 44.346 RPT229 - + 44.346 RPT229 - + 45.307 RPT230 - + 45.307 RPT230 - + 42.904 RPT231 - + 42.904 RPT231 diff --git a/reference/route/bendgc-expected.gpx b/reference/route/bendgc-expected.gpx new file mode 100644 index 000000000..e6b35637d --- /dev/null +++ b/reference/route/bendgc-expected.gpx @@ -0,0 +1,71 @@ + + + + + + RPT001 + <table> +<tr><td>Longitude: 140.615728</td></tr> +<tr><td>Latitude: 35.752604</td></tr> +</table> + <table> +<tr><td>Longitude: 140.615728</td></tr> +<tr><td>Latitude: 35.752604</td></tr> +</table> + + + RPT002 + <table> +<tr><td>Longitude: 166.492918</td></tr> +<tr><td>Latitude: 42.992831</td></tr> +</table> + <table> +<tr><td>Longitude: 166.492918</td></tr> +<tr><td>Latitude: 42.992831</td></tr> +</table> + + + RPT003 + <table> +<tr><td>Longitude: -157.876012</td></tr> +<tr><td>Latitude: 46.203079</td></tr> +</table> + <table> +<tr><td>Longitude: -157.876012</td></tr> +<tr><td>Latitude: 46.203079</td></tr> +</table> + + + RPT004 + <table> +<tr><td>Longitude: -127.622914</td></tr> +<tr><td>Latitude: 42.925678</td></tr> +</table> + <table> +<tr><td>Longitude: -127.622914</td></tr> +<tr><td>Latitude: 42.925678</td></tr> +</table> + + + Path + Generated from track Path + + RPT001 + + + RPT002 + + + RPT002 + + + RPT003 + + + RPT003 + + + RPT004 + + + diff --git a/reference/route/bendgc-input.kml b/reference/route/bendgc-input.kml new file mode 100644 index 000000000..a5de804e5 --- /dev/null +++ b/reference/route/bendgc-input.kml @@ -0,0 +1,169 @@ + + + + GPS device + Created Mon Aug 12 01:46:31 2024 GMT + + 186.496407 + 40.977841 + 9571750.976741 + + + + + + + + normal + #route_n + + + highlight + #route_h + + + + + + + + + normal + #waypoint_n + + + highlight + #waypoint_h + + + + + Routes + + + Points + + RPT001 + + +Longitude: 140.615728 +Latitude: 35.752604 + +]]> + + 140.615728 + 35.752604 + 66 + + #route + + 140.615728,35.752604 + + + + RPT002 + + +Longitude: 166.492918 +Latitude: 42.992831 + +]]> + + 166.492918 + 42.992831 + 66 + + #route + + 166.492918,42.992831 + + + + RPT003 + + +Longitude: -157.876012 +Latitude: 46.203079 + +]]> + + -157.876012 + 46.203079 + 66 + + #route + + -157.876012,46.203079 + + + + RPT004 + + +Longitude: -127.622914 +Latitude: 42.925678 + +]]> + + -127.622914 + 42.925678 + 66 + + #route + + -127.622914,42.925678 + + + + + Path + #lineStyle + + 1 + +140.615728,35.752604 +166.492918,42.992831 +-157.876012,46.203079 +-127.622914,42.925678 + + + + + + + diff --git a/testo.d/bend.test b/testo.d/bend.test index bf6e81a82..349842a58 100644 --- a/testo.d/bend.test +++ b/testo.d/bend.test @@ -3,3 +3,7 @@ rm -f ${TMPDIR}/bend.* gpsbabel -i gpx -f ${REFERENCE}/route/bend-input.gpx -x bend,distance=25,minangle=5 -o gpx -F ${TMPDIR}/bend.gpx compare ${REFERENCE}/route/bend-expected.gpx ${TMPDIR}/bend.gpx + +# Although not a real useful use case, test with extremly long segments to check great circle usage. +gpsbabel -i kml -f ${REFERENCE}/route/bendgc-input.kml -x transform,rte=trk,del -x bend,distance=1000000,minangle=5 -o gpx -F ${TMPDIR}/bendgc-expected.gpx +compare ${REFERENCE}/route/bendgc-expected.gpx ${TMPDIR}/bendgc-expected.gpx diff --git a/tools/ci_script_osx.sh b/tools/ci_script_osx.sh index 3cb759eec..7222bc86d 100755 --- a/tools/ci_script_osx.sh +++ b/tools/ci_script_osx.sh @@ -41,13 +41,13 @@ case "${GENERATOR[1]}" in Xcode | "Ninja Multi-Config") cmake "${SOURCE_DIR}" -DCMAKE_OSX_ARCHITECTURES=${ARCHS} -DCMAKE_OSX_DEPLOYMENT_TARGET=${DEPLOY_TARGET} "${GENERATOR[@]}" cmake --build . --config Release - ctest -C Release + ctest -C Release --output-on-failure cmake --build . --config Release --target package_app ;; *) cmake "${SOURCE_DIR}" -DCMAKE_OSX_ARCHITECTURES=${ARCHS} -DCMAKE_OSX_DEPLOYMENT_TARGET=${DEPLOY_TARGET} -DCMAKE_BUILD_TYPE=Release "${GENERATOR[@]}" cmake --build . - ctest + ctest --output-on-failure cmake --build . --target package_app cmake --build . --target gpsbabel.html cmake --build . --target gpsbabel.pdf